
package org.sql.commands.mysql.clause;

// *************************************************************************/
// Charada Soft
// Area de Desarrollo de Sistemas de Información
// *************************************************************************/
// Proyecto : java connector sql 
// Archivo : OrderBy.java
// Descripcion : Clase OrderBy
// *************************************************************************/
// Version : 2.10.4
// Fecha de Creación: 26 de Septiembre de 2014
// Author : Daniel Andres Castillo Pedroza
// *************************************************************************/

import java.util.ArrayList;
import org.sql.commands.Clause;
import org.sql.commands.exception.DMLException;
import org.sql.commands.mysql.command.ConfiguratorCommand;

public class OrderBy implements Clause {
    
    // Atributos estáticos de la clase OrderBy
    
    public static final String ASCENDING = "ASC";
    public static final String DESCENDING = "DESC";
    
    // Atributos de la clase OrderBy
    
    private ArrayList <String> columns;
    private String typeOrder = ASCENDING;
    
    // Constructor de la clase OrderBy
    
    public OrderBy() {
      columns = new ArrayList();
    }
    
    // Metodos de la clase OrderBy
    
    /**
      * 
      * @param columns 
    */
    
    public void setColumns(ArrayList <String> columns) {
      this.columns = columns;
    }
    
    /**
      * 
      * @param column 
    */
    
    public void addColumn(String column) {
      columns.add(column);
    }
    
    /**
      * 
      * @param typeOrder 
    */
    
    public void setTypeOrder(String typeOrder) {
      this.typeOrder = typeOrder;
    }
    
    // Metodos estáticos de la clase OrderBy
    
    /**
      * 
      * @param column
      * @return 
    */
    
    public static OrderBy creatorClause(String column) {
      OrderBy orderBy = new OrderBy(); orderBy.addColumn(column);
      
      return orderBy; // Retornando Objeto GROUP BY
    }
    
    /**
      * 
      * @param columns
      * @return 
    */
    
    public static OrderBy creatorClause(ArrayList <String> columns) {
      OrderBy orderBy = new OrderBy(); orderBy.setColumns(columns);
      
      return orderBy; // Retornando Objeto GROUP BY
    }
    
    // Metodos sobreescritos de la clase OrderBy

    @Override
    public String getClause() throws DMLException {
      if ((columns == null) || (columns.isEmpty())) {
        throw new DMLException(DMLException.COLUMNS_UNDEFINED);
      } // No ha definido las Columnas de la Sentencia
      
      String clauseOrderBy = "ORDER BY"; // Declarando dato para Proceso
      
      clauseOrderBy += " " + ConfiguratorCommand.columnsForCommand(columns);
      clauseOrderBy += " " + typeOrder; // Tipo de Ordenamiento
      
      return clauseOrderBy; // Retornando Clausula ORDER BY
    }
}